#include "../../public/_public.h"

using namespace idc;

cpactive pactive;
void Exit(int signal);

int main(int argc,char* argv[])
{
    //帮助文档
    if (argc != 4)
    {
        printf("\n");
        printf("Using:/project/tools/bin/gzipfiles pathname matchstr timeout\n\n");

        printf("Example:/root/mylib/project/tools/bin/gzipfiles /tmp/idc/surfdata \"*.xml,*.json\" 0.01\n");
        cout << R"(        /project/tools/bin/gzipfiles /log/idc "*.log.20*" 0.02)" << endl;
        printf("        /project/tools/bin/procctl 300 /project/tools/bin/gzipfiles /log/idc \"*.log.20*\" 0.02\n");
        printf("        /project/tools/bin/procctl 300 /project/tools/bin/gzipfiles /tmp/idc/surfdata \"*.xml,*.json\" 0.01\n\n");

        printf("这是一个工具程序，用于删除历史的数据文件或日志文件。\n");
        printf("本程序把pathname目录及子目录中timeout天之前的匹配matchstr文件全部删除，timeout可以是小数。\n");
        printf("本程序不写日志文件，也不会在控制台输出任何信息。\n\n\n");

        return -1;
	}
    
    //关闭所有的信号
    closeallsign();
    signal(SIGINT,Exit);signal(SIGTERM,Exit);
    string strtimeout=ltime1("yyyymmddhh24miss",0-int(atof(argv[3]))*24*60*60);
    cdir dir;
    if(dir.opendir(argv[1],argv[2],10000,true)==false)
    {
        printf("dir.open(%s) failed.\n",argv[1]);
        return -1;
    }
    while(dir.readdir())
    {
        if(dir.m_ctime<strtimeout)
        {  
            cout<<dir.m_ffilename<<endl;
            string cmd="gzip -f "+dir.m_ffilename+" 1>/dev/null 2>/dev/null";
            signal(SIGCHLD, SIG_DFL);   //注意:我们在调用system函数之前，需要把SIGCHLD信号处理函数设置为默认的，否则会报错:No child processes
            if(system(cmd.c_str())!=0)
            {
               perror(cmd.c_str());
            }
            else
            {
                printf("gzip -f %s ok.\n",dir.m_ffilename.c_str());
            }
            pactive.update();
        }
    }

    return 0;
}

void Exit(int signal)
{
    cout<<"程序退出，信号为："<<signal<<endl;
    exit(0);
}